Skip to content

Передача параметров в ibcmd: список файлов, кавычки, зависание при запросе пароля - #21

Merged
Segate-ekb merged 2 commits into
vanessa-opensource:mainfrom
Segate-ekb:fix/ibcmd-params
Sep 24, 2026
Merged

Segate-ekb merged 2 commits into
vanessa-opensource:mainfrom
Segate-ekb:fix/ibcmd-params

Conversation

@Segate-ekb

Copy link
Copy Markdown

Closes #19, closes #20, closes #13.

Проблемы

  1. ЗагрузитьВыбранныеФайлыКонфигурации передаёт в ibcmd только последний файл списка #19. ЗагрузитьВыбранныеФайлыКонфигурации при двух и более файлах передаёт в ibcmd только последний: ЗаписатьСписокФайловВФайлПараметров перезаписывает строку в цикле.
  2. Проблемные пароли при использовании приложения #13. Пользователь и пароль (--user, --password, --db-user, --db-pwd) подставляются из переменной среды без кавычек. Значение с пробелом или & разбивается оболочкой (cmd /c, sh -c).
  3. Команда зависает, если ibcmd запрашивает пароль #20. При неуспешной аутентификации ibcmd запрашивает пароль в консоли. Стандартный ввод не перенаправлен, и команда зависает навсегда.

Тесты

Отдельный первый коммит, на старом коде все три теста падают:

  • ТестДолжен_ПередатьВсеВыбранныеФайлы: список Missing.xml, Configuration.xml. Ожидается ошибка ibcmd об отсутствии Missing.xml, до исправления загрузка проходит без ошибки.
  • ТестДолжен_ПередатьПараметрыАвторизацииСоСпецсимволами: пустая ИБ без пользователей, пользователь user & (x) ^ %PATH% $HOME, пароль pass & word. Ожидается, что имя целиком есть в сообщении ibcmd. До исправления командная строка разбивается по &.
  • ТестДолжен_ЗавершитьсяОшибкойПриЗапросеПароля: пустая ИБ без пользователей, admin/admin. Ожидается ошибка аутентификации, до исправления тест зависает.

Решение

  • Строка списка файлов дописывается, а не перезаписывается.
  • Подстановка переменной среды в секретных параметрах оборачивается в кавычки (ОбернутьВКавычки).
  • Если у команды нет перенаправления ввода, ВыполнитьКоманду добавляет < NUL (Linux: < /dev/null): ibcmd завершается ошибкой вместо ожидания ввода.

Совместимость

  • Если вызывающий код сам оборачивал значение в кавычки (обход из Проблемные пароли при использовании приложения #13), эти кавычки нужно убрать.
  • На Windows значение, которое оканчивается на \, теперь стоит перед закрывающей кавычкой. Такой \ нужно удваивать, как и в путях в кавычках.

Проверка

tests/ibcmdrunner-test.os целиком на 8.3.24, 8.3.27 и 8.5.1 (Windows): 30 из 31. ТестДолжен_ОбновитьКонфигурациюДинамически падает так же и без изменений.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment